/** 
 * Generated CppUnit test driver template.
 * To build it, add the following line at the end of
 * your existing Makefile:
 *    include src/DAOTests/SaversTests/EmployeeSaversTests/EmployeeAemSaverTests/EmployeeAemDbSaverTest.mk
 * Build the src/DAOTests/SaversTests/EmployeeSaversTests/EmployeeAemSaverTests/EmployeeAemDbSaverTest target from the Make Target view
 */

#ifndef TEST_EmployeeAemDbSaverTest
#define TEST_EmployeeAemDbSaverTest

#include "../../../../DAO/Savers/EmployeeSavers/EmployeeAemSaver/IEmployeeAemDbSaver.h"

#include <cppunit/extensions/HelperMacros.h>
#include <cppunit/TestFixture.h>

class EmployeeAemDbSaverTest : public CppUnit::TestFixture {
	CPPUNIT_TEST_SUITE(EmployeeAemDbSaverTest);

	CPPUNIT_TEST(saveAem_CurrentAemPlusOne_ReturnTrue);
	CPPUNIT_TEST(saveAem_CurrentAemPlusTen_ReturnFalse);
	CPPUNIT_TEST(saveAem_NegativeAem_ReturnFalse);
	CPPUNIT_TEST(saveAem_CharactersAsAem_ReturnFalse);
	CPPUNIT_TEST(saveAem_SybolsAsAem_ReturnFalse);
	CPPUNIT_TEST(saveAem_SybolsAndCharactersAsAem_ReturnFalse);
	CPPUNIT_TEST(saveAem_NullAsAem_ReturnFalse);
	CPPUNIT_TEST(saveAem_PositiveNumberAsAem_ReturnTrue);

	CPPUNIT_TEST_SUITE_END();
public:
	/**
	 * Creates new EmployeeAemDbSaver for IEmpolyeeAemDbSaver reference
	 */
	void setUp();
	/**
	 * Deletes the reference to EmployeeAemDbSaver
	 */
	void tearDown();
	/**
	 * Tests saveAem with a correct aem. In this case, current aem is the last aem plus 1
	 * CONDITION : currentAem + 1
	 * EXPECTED_BEHAVIOUR : return true
	 */
	void	saveAem_CurrentAemPlusOne_ReturnTrue();
	/**
	 * Tests saveAem with a wrong aem. In this case, wrong aem is the last aem plus 10
	 * CONDITION : currentAem + 10
	 * EXPECTED_BEHAVIOUR : return false
	 */
	void	saveAem_CurrentAemPlusTen_ReturnFalse();
	/**
	 * Tests saveAem with a wrong aem. In this case, wrong aem is a negative aem
	 * CONDITION : negative number
	 * EXPECTED_BEHAVIOUR : return false
	 * */
	void	saveAem_NegativeAem_ReturnFalse();
	/**
	 * Tests saveAem when the aem contais characters
	 * CONDITION : charactes as aem
	 * EXPECTED_BEHAVIOUR : return false
	 */
	void	saveAem_CharactersAsAem_ReturnFalse();
	/**
	 * Tests saveAem when aem contains symbols
	 * CONDITION : symbols as aem
	 * EXPECTED_BEHAVIOUR : return false
	 */
	void	saveAem_SybolsAsAem_ReturnFalse();
	/**
	 * Tests saveAem when aem contains symbols and characters
	 * CONDITION : symbols and characters as aem
	 * EXPECTED_BEHAVIOUR : return false
	 */
	void	saveAem_SybolsAndCharactersAsAem_ReturnFalse();
	/**
	 * Tests saveAem when aem is NULL
	 * CONDITION : NULL as aem
	 * EXPECTED_BEHAVIOUR : return false
	 */
	void	saveAem_NullAsAem_ReturnFalse();
	/**
	 * Tests saveAem when aem is number
	 * CONDITION : positive number as aem
	 * EXPECTED_BEHAVIOUR : return true
	 */
	void	saveAem_PositiveNumberAsAem_ReturnTrue();

private:
	IEmployeeAemDbSaver *aemSaver_;
	const string *SYMBOLS_;
};


#endif /*EMPLOYEEAEMDBSAVERTEST*/
